<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of BilheteDAO
 *
 * @author thales
 */
class BilheteDAO {
    public $conn = null;
    
    public function __construct() {
        $this->conn = DB::getConn();
    }
    
    /**
     * Método responsávelpor inserir um novo bilhete.
     * 
     * @param BilheteVO $objBilhete
     * @return boolean 
     */
    public function salvar(BilheteVO $objBilhete){
        $sql = 'insert into 
                    bilhete(
                        data_emissao,
                        localizador,
                        cia_aerea,
                        dt_ida,
                        dt_volta,
                        num_bilhete,
                        val_du,
                        tx_embarque,
                        val_pagar,
                        val_receber,
                        val_multa_pontos,
                        val_multa_moeda,
                        meta_domestica,
                        percent_domestico,
                        cliente_id,
                        tipo_pagamento_id,
                        tipo_operacao_id,
                        origem,
                        destino,
                        data_cadastro
                    )
                    values(
                        ?,
                        ?,
                        ?,
                        ?,
                        ?,
                        ?,
                        ?,
                        ?,
                        ?,
                        ?,
                        ?,
                        ?,
                        ?,
                        ?,
                        ?,
                        ?,
                        ?,
                        ?,
                        ?,
                        NOW()
                    )';
        
        $data_emissao = implode('-', array_reverse(explode('/', $objBilhete->getDataEmissao())));
        $dt_ida = implode('-', array_reverse(explode('/', $objBilhete->getDtIda())));
        $dt_volta = implode('-', array_reverse(explode('/', $objBilhete->getDtVolta())));

        $stt = $this->conn->prepare($sql);
        $stt->bindValue(1,  $data_emissao, PDO::PARAM_STR);
        $stt->bindValue(2,  $objBilhete->getLocalizador(), PDO::PARAM_STR);
        $stt->bindValue(3,  $objBilhete->getCiaAerea(), PDO::PARAM_STR);
        $stt->bindValue(4,  $dt_ida, PDO::PARAM_STR);
        $stt->bindValue(5,  $dt_volta, PDO::PARAM_STR);
        $stt->bindValue(6,  $objBilhete->getNumBilhete(), PDO::PARAM_INT);
        $stt->bindValue(7,  $objBilhete->getValDu(), PDO::PARAM_STR);
        $stt->bindValue(8,  $objBilhete->getTxEmbarque(), PDO::PARAM_STR);
        $stt->bindValue(9,  $objBilhete->getValPagar(), PDO::PARAM_STR);
        $stt->bindValue(10,  $objBilhete->getValReceber(), PDO::PARAM_STR);
        $stt->bindValue(11,  $objBilhete->getValMultaPontos(), PDO::PARAM_STR);
        $stt->bindValue(12,  $objBilhete->getValMultaMoeda(), PDO::PARAM_STR);
        $stt->bindValue(13,  $objBilhete->getMetaDomestica(), PDO::PARAM_STR);
        $stt->bindValue(14,  $objBilhete->getPercentDomestica(), PDO::PARAM_STR);
        $stt->bindValue(15,  $objBilhete->getClienteId(), PDO::PARAM_INT);
        $stt->bindValue(16,  $objBilhete->getTipoPagamentoId(), PDO::PARAM_INT);
        $stt->bindValue(17,  $objBilhete->getTipoOperacaoId(), PDO::PARAM_INT);
        $stt->bindValue(18,  $objBilhete->getOrigem(), PDO::PARAM_INT);
        $stt->bindValue(19,  $objBilhete->getDestino(), PDO::PARAM_INT);
        
        if ( !$stt->execute() ){
            throw new Exception('Não foi possível salvar o bilhete!<br>' . var_dump($stt->errorInfo()) );
        } 
        
        LogDAO::getInstance()->salvar(__METHOD__, $this->conn->lastInsertId(), __CLASS__);
        
        return true;
        
    }
    
    /**
     * Método responsávelpor alterar os dados do bilhete
     * 
     * @param BilheteVO $objBilhete
     * @return boolean 
     */
    public function alterar(BilheteVO $objBilhete){
        if($objBilhete->getClienteId()){
            $sql = 'Update 
                    bilhete 
                set 
                    localizador       = :localizador,
                    data_emissao      = :data_emissao,
                    cia_aerea         = :cia_aerea,
                    dt_ida            = :dt_ida,
                    dt_volta          = :dt_volta,
                    num_bilhete       = :num_bilhete,
                    val_du            = :val_du,
                    tx_embarque       = :tx_embarque,
                    val_pagar         = :val_pagar,
                    val_receber       = :val_receber,
                    val_multa_pontos  = :val_multa_pontos,
                    val_multa_moeda   = :val_multa_moeda,
                    meta_domestica    = :meta_domestica,
                    percent_domestico = :percent_domestico,
                    cliente_id        = :cliente_id,
                    tipo_pagamento_id = :tipo_pagamento_id,
                    tipo_operacao_id  = :tipo_operacao_id,
                    origem            = :origem,
                    destino           = :destino
                where
                    id = :id';
        }else{
            $sql = 'Update 
                    bilhete 
                set 
                    localizador       = :localizador,
                    data_emissao      = :data_emissao,
                    cia_aerea         = :cia_aerea,
                    dt_ida            = :dt_ida,
                    dt_volta          = :dt_volta,
                    num_bilhete       = :num_bilhete,
                    val_du            = :val_du,
                    tx_embarque       = :tx_embarque,
                    val_pagar         = :val_pagar,
                    val_receber       = :val_receber,
                    val_multa_pontos  = :val_multa_pontos,
                    val_multa_moeda   = :val_multa_moeda,
                    meta_domestica    = :meta_domestica,
                    percent_domestico = :percent_domestico,
                    tipo_pagamento_id = :tipo_pagamento_id,
                    tipo_operacao_id  = :tipo_operacao_id,
                    origem            = :origem,
                    destino           = :destino
                where
                    id = :id';
        }
        
        $data_emissao = implode('-', array_reverse(explode('/', $objBilhete->getDataEmissao())));
        $dt_ida = implode('-', array_reverse(explode('/', $objBilhete->getDtIda())));
        $dt_volta = implode('-', array_reverse(explode('/', $objBilhete->getDtVolta())));
        
        $localizador       = $objBilhete->getLocalizador();
        $cia_aerea         = $objBilhete->getCiaAerea();
        $num_bilhete       = $objBilhete->getNumBilhete();
        $val_du            = $objBilhete->getValDu();
        $tx_embarque       = $objBilhete->getTxEmbarque();
        $val_pagar         = $objBilhete->getValPagar();
        $val_receber       = $objBilhete->getValReceber();
        $val_multa_pontos  = $objBilhete->getValMultaPontos();
        $val_multa_moeda   = $objBilhete->getValMultaMoeda();
        $meta_domestica    = $objBilhete->getMetaDomestica();
        $percent_domestico = $objBilhete->getPercentDomestico();  
        if($objBilhete->getClienteId()){
            $cliente_id    = $objBilhete->getClienteId();
        }
        $tipo_pagamento_id = $objBilhete->getTipoPagamentoId();
        $tipo_operacao_id  = $objBilhete->getTipoOperacaoId();
        $origem            = $objBilhete->getOrigem();
        $destino           = $objBilhete->getDestino();
        $id                = $objBilhete->getId();
        
        $stt = $this->conn->prepare($sql);
        
        $stt->bindParam(':localizador',       $localizador);
        $stt->bindParam(':data_emissao',      $data_emissao);
        $stt->bindParam(':cia_aerea',         $cia_aerea);
        $stt->bindParam(':dt_ida',            $dt_ida);
        $stt->bindParam(':dt_volta',          $dt_volta);
        $stt->bindParam(':num_bilhete',       $num_bilhete);
        $stt->bindParam(':val_du',            $val_du);
        $stt->bindParam(':tx_embarque',       $tx_embarque);
        $stt->bindParam(':val_pagar',         $val_pagar);
        $stt->bindParam(':val_receber',       $val_receber);
        $stt->bindParam(':val_multa_pontos',  $val_multa_pontos);
        $stt->bindParam(':val_multa_moeda',   $val_multa_moeda);
        $stt->bindParam(':meta_domestica',    $meta_domestica);
        $stt->bindParam(':percent_domestico', $percent_domestico);
        if($objBilhete->getClienteId()){
            $stt->bindParam(':cliente_id',    $cliente_id);
        }
        $stt->bindParam(':tipo_pagamento_id', $tipo_pagamento_id);
        $stt->bindParam(':tipo_operacao_id',  $tipo_operacao_id);
        $stt->bindParam(':origem',            $origem);
        $stt->bindParam(':destino',           $destino);
        $stt->bindParam(':id',                $id);
        
        if ( !$stt->execute() ){
            throw new Exception('Não foi possível alterar os dados do bilhete!<br>' . var_dump($stt->errorInfo()) );
        } 
        
        LogDAO::getInstance()->salvar(__METHOD__, $objBilhete->getId() , __CLASS__);
        return true;
        
    }
    
    /**
     * Método responsável por buscar todos os dados do bilhete.<br>
     * 
     * @param BilheteVO $objBilhete
     * @return listaObjBilhete Array
     */
    public function pesquisarDados(VendasBO $objBilheteBO){
        $sql = 'select 
                    b.*, c.nome 
                from
                    bilhete b
                join cliente c
                    on c.id = b.cliente_id
                where 
                    b.localizador like ?';
                
        
        $stt = $this->conn->prepare($sql);  
        $stt->bindValue(1, $objBilheteBO->getBilhete()->getLocalizador(),PDO::PARAM_STR);
        
        if ( !$stt->execute() ){
            throw new Exception('Não foi possível pesquisar os dados do bilhete!' . __METHOD__ );
        } 
       
        
        $listaObjBilheteBO = array();
        while( $tmp = $stt->fetch(PDO::FETCH_ASSOC) ){
            
            $objBilheteBO = new VendasBO();
            $objBilheteBO->getBilhete()->setId($tmp['id']);
            $objBilheteBO->getBilhete()->setLocalizador($tmp['localizador']);
            $objBilheteBO->getBilhete()->setDataEmissao($tmp['data_emissao']);
            
            $objBilheteBO->getCliente()->setNome($tmp['nome']);
            
            
            $listaObjBilheteBO[] = $objBilheteBO;
            
        }
        
        return $listaObjBilheteBO;
    }
    
    /**
     * Método responsável por pegar os dados do bilhete.<br>
     * 
     * @param BilheteVO $objBilhete
     * @return boolean 
     */
    public function pesquisar( VendasBO $objBilheteBO){
        $sql = 'select 
                    b.*, c.nome 
                from
                    bilhete b
                join cliente c
                    on c.id = b.cliente_id';
        
        $stt = $this->conn->prepare($sql);  
        $stt->bindValue(1, $objBilheteBO->getBilhete()->getId(),PDO::PARAM_INT);
        
        
        
        if ( !$stt->execute() ){
            throw new Exception('Não foi possível pegar os dados do bilhete!' . __METHOD__ );
        } 
        
        $tmp = $stt->fetch(PDO::FETCH_ASSOC);

        $dtIda   = implode('/', array_reverse(explode('-', $tmp['dt_ida'])));
        $dtVolta = implode('/', array_reverse(explode('-', $tmp['dt_volta'])));

        $objBilheteBO->getBilhete()->setId               ($tmp['id']);
        $objBilheteBO->getBilhete()->setDataEmissao      ($tmp['data_emissao']);
        $objBilheteBO->getBilhete()->setLocalizador      ($tmp['localizador']);
        $objBilheteBO->getBilhete()->setCiaAerea         ($tmp['cia_aerea']);
        $objBilheteBO->getBilhete()->setDtIda            ($dtIda);
        $objBilheteBO->getBilhete()->setDtVolta          ($dtVolta);
        $objBilheteBO->getBilhete()->setNumBilhete       ($tmp['num_bilhete']);
        $objBilheteBO->getBilhete()->setValDu            ($tmp['val_du']);
        $objBilheteBO->getBilhete()->setTxEmbarque       ($tmp['tx_embarque']);
        $objBilheteBO->getBilhete()->setValPagar         ($tmp['val_pagar']);
        $objBilheteBO->getBilhete()->setValReceber       ($tmp['val_receber']);
        $objBilheteBO->getBilhete()->setValMultaPontos   ($tmp['val_multa_pontos']);
        $objBilheteBO->getBilhete()->setValMultaMoeda    ($tmp['val_multa_moeda']);
        $objBilheteBO->getBilhete()->setMetaDomestica    ($tmp['meta_domestica']);
        $objBilheteBO->getBilhete()->setPercentDomestico ($tmp['percent_domestico']);
        $objBilheteBO->getBilhete()->setClienteId        ($tmp['cliente_id']);
        $objBilheteBO->getBilhete()->setTipoPagamentoId  ($tmp['tipo_pagamento_id']);
        $objBilheteBO->getBilhete()->setTipoOperacaoId   ($tmp['tipo_operacao_id']);
        $objBilheteBO->getBilhete()->setOrigem           ($tmp['origem']);
        $objBilheteBO->getBilhete()->setDestino          ($tmp['destino']);
        $objBilheteBO->getCliente()->setNome             ($tmp['nome']);
            
        return true;   
    }
    
    /**
     * Método para excluir um bilhete do sistema.
     * 
     * @param BilheteVO $objBilhete
     * @return boolean 
     */
    public function excluir(BilheteVO $objBilhete){
        $sql = 'delete from bilhete where id = ?';
        
        $stt = $this->conn->prepare($sql);
        $stt->bindValue(1,  $objBilhete->getId(), PDO::PARAM_INT);
        
        if ( !$stt->execute() ){
            throw new Exception('Não foi possível excluir o bilhete!<br>' . var_dump($stt->errorInfo()) );
        } 
        
        LogDAO::getInstance()->salvar(__METHOD__, $objBilhete->getId() , __CLASS__);
        
        return true;
    }
}

?>
